# 结束语
欢迎同学们历经千辛万苦,终于来到了最后一章。这一章,我们将串联起前面所学的知识点,和 Jenkins + Nexus 做一套流程的集成。
在这里,我准备了一套简单的增删改查项目。前端技术栈为 React + craco ,后端技术栈为 MySQL + eggjs 。

让我们直接开始吧!
# 操作步骤
在开始之前,我们需要在 Kubernetes 集群内再加一台 Node ,起名为 node2 。具体流程请参考之前的章节。 Node2 的主要用途是用于部署 MySQL 使用。
# 1. 项目仓库
先来看下这次项目部署所需要的仓库:gitee.com/organizatio…。 其中,k8s-demo-frontend 是前端项目,k8s-demo-backend 是后端项目。
# 2. 构建 & 部署前端应用
第一步我们先部署前端应用,先将前端跑起来。
我们前往 Jenkins ,新建一个任务,起名为 demo-frontend 。接着配置任务的Git代码源,让 Jenkins 可以拉取代码。因为我们目前是公开项目,所以还不需要配置私有仓库认证。

按照之前的方式,勾选 构建环境 => Provide Node & npm bin/ folder to PATH 选项,给你执行的任务增加 Nodejs 运行环境

继续添加构建脚本,让 Jenkins 构建镜像。找到 构建 => 添加构建步骤 => Excute Shell ,填写以下脚本:
脚本首先使用 npm run build 对代码进行编译打包,随后使用 docker build 命令构建镜像。最后推送镜像到镜像库内。
#!/bin/sh -l
time=$(date "+%Y%m%d%H%M%S")
npm install --registry=https://registry.npm.taobao.org
npm run build
docker build -t 172.16.81.7:8082/frontend-app:$time .
docker login -u $DOCKER_LOGIN_USERNAME -p $DOCKER_LOGIN_PASSWORD 172.16.81.7:8082
docker push 172.16.81.7:8082/frontend-app:$time
因为推送镜像需要 docker login ,我们还需要在 Jenkins 端配置下 docker 登录信息。配置文件方式如下图,和之前的章节无异。

保存后执行,即可生成前端镜像。
镜像生成后,我们还需要去k8s集群内部署下这个镜像。
前往集群节点,新建一个文件。叫做 demo-frontend.yaml ,输入以下内容。镜像地址换成刚才 Jenkins 构建后的镜像地址。
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-frontend
spec:
selector:
matchLabels:
app: demo-frontend
replicas: 1
template:
metadata:
labels:
app: demo-frontend
spec:
imagePullSecrets:
- name: private-registry
containers:
- name: frontend-app
imagePullPolicy: Always
image: 172.16.81.7:8082/frontend-app:20210117162137
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: demo-frontend-service
spec:
selector:
app: demo-frontend
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
保存后退出,使用 kubectl apply 命令部署前端服务。部署完毕后,使用 kubectl get svc 命令来获取下服务的端口。 image.png 可以看到,此时前端已经部署成功了。使用浏览器打开即可看到页面。
# 3. 部署 & 初始化MySQL
我们在开头时,添加了一台全新的 Node 节点,这台节点机器用于部署MySQL服务。我们可以给节点加污点,让除了特定的服务,其他服务都不可以部署上去。
这里添加一条污点, key 等于 MySQL ,
